import datetime
from typing import Optional, List

from typing_extensions import TypedDict


class BaseDict(TypedDict):
    create_time: datetime.datetime
    delete_time: Optional[datetime.datetime]


class ContainerConfig(BaseDict):
    container_name: str  # 托盘名称
    max_count: int  # 最大承载数量
    prefix: str  # 固定前缀
    serial_len: int  # 流水号长度
    start: int  # 开始位
    end: int  # 截止位
    remark: str  # 备注


class ProductInfo(TypedDict):  # 后期可能会添加里面的电芯码的状态信息, 字段先放上去
    mark: str  # 电芯码
    slot_no: str  # 通道号
    ng_code: Optional[List[str]] # ng代码 ["E0005","E0010"]
    is_ng: Optional[int]  # 0 合格, 1 不合格, 先兼容之前的数据, 后续确认了, 把optional去掉


class ContainerStatus(BaseDict):
    """存储容器当前情况"""

    # 下面几个字段记录一些最近的操作信息
    last_update_time: Optional[datetime.datetime]   # 最后的更新时间
    last_operate: str  # 容器最后的操作  组盘/解盘/剔除ng码操作
    last_equip_code: str  # 最后的操作设备编码
    last_upperpc_code: str  # 最后操作的上位机编码

    # unit: str  # 容器单位  当前是托 暂时不考虑这个了
    container_mark: str  # 容器编码
    count: int  # 容器当前数量
    product_list: List[ProductInfo]
    status: int  # 容器状态, 预留字段 0 正常 其他数字暂时没有
